// 1. 编译生成的文件是什么？
// 当你编译每个 .cpp 源文件时，编译器会把它翻译成目标文件（object file），通常扩展名为 .o（Linux/Unix）或 .obj（Windows）。
// 编译 a.cpp → 生成 a.o
// 编译 b.cpp → 生成 b.o
// 这些目标文件里包含了对应源文件中所有函数、变量的机器码，但还没有把所有依赖的代码“拼接”到一起，不能单独运行。

// 2. 链接后文件是什么？
// 链接器（Linker）会把所有目标文件（.o 或 .obj）以及需要的库文件合并，生成可执行文件（executable file）或动态/静态库：
// 在 Linux/Unix 下，常见的可执行文件没有扩展名，或者叫 a.out、myprogram。
// 在 Windows 下，可执行文件通常是 .exe，静态库是 .lib，动态库是 .dll。

// 链接过程会：

// 合并各个目标文件中的代码和数据
// 解决函数和变量的引用关系（比如 a.o 里调用了 myfunc.o 里的函数）
// 去除重复的模板实例化（如果有）
